{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# XGBoost Parameter Tuning for Rental_listing Dataset-1\n",
    "\n",
    "## 寻找最佳的参数n_estimators，然后再后续调优"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. 直接调用xgboost内嵌的cv寻找最佳的参数n_estimators,使用数据为Rental_listing的数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# path to where the data lies\n",
    "#dpath = './data/'\n",
    "train = pd.read_csv(\"RentListingInquries_FE_train.csv\")\n",
    "test= pd.read_csv(\"RentListingInquries_FE_test.csv\")\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x24c166bac18>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#interest_level 分布，看看各类样本分布是否均衡\n",
    "sns.countplot(train.interest_level);\n",
    "pyplot.xlabel('interest_level');\n",
    "pyplot.ylabel('Number of occurrences');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 样本分布不均匀，所以交叉验证时也考虑各类样本按比例抽取，特征工程文中已经做好不再做。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 划分X和y\n",
    "y_train = train[\"interest_level\"]\n",
    "X_train = train.drop([\"interest_level\"], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    " #定义Kfold\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "#直接调用xgboost内嵌的交叉验证（cv），可对连续的n_estimators参数进行快速交叉验证\n",
    "#而GridSearchCV只能对有限个参数进行交叉验证\n",
    "def modelfit(alg, X_train, y_train, cv_folds=None, early_stopping_rounds=20):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    xgb_param['num_class'] = 3\n",
    "    \n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')\n",
    "        \n",
    "    #Predict training set:\n",
    "    train_predprob = alg.predict_proba(X_train)\n",
    "    logloss = log_loss(y_train, train_predprob)\n",
    "\n",
    "   #Print model report:\n",
    "    print (\"logloss of train :\" )\n",
    "    print (logloss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 为了确定boosting参数，我们要先给其它参数一个初始值。咱们先按如下方法取值：\n",
    "\n",
    "1、max_depth = 5 :这个参数的取值最好在3-10之间。我选的起始值为5，但是你也可以选择其它的值。起始值在4-6之间都是不错的选择。\n",
    "\n",
    "2、min_child_weight = 1:在这里选了一个比较小的值，因为这是一个极不平衡的分类问题。因此，某些叶子节点下的值会比较小。\n",
    "\n",
    "3、gamma = 0: 起始值也可以选其它比较小的值，在0.1到0.2之间就可以。这个参数后继也是要调整的。\n",
    "\n",
    "4、subsample=0.7, colsample_bytree = 0.8: 这个是最常见的初始值了。典型值的范围在0.5-0.9之间。\n",
    "\n",
    "这里把学习速率就设成默认的0.1。然后用xgboost中的cv函数来确定最佳的决策树数量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "logloss of train :\n",
      "0.488803061395\n"
     ]
    }
   ],
   "source": [
    "#params = {\"objective\": \"multi:softprob\", \"eval_metric\":\"mlogloss\", \"num_class\": 3}\n",
    "xgb1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=1000,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.7,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb1, X_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 结果也不是特别理想"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\anaconda\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x24c12e49470>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "        \n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "        \n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\anaconda\\lib\\site-packages\\ipykernel_launcher.py:1: FutureWarning: from_csv is deprecated. Please use read_csv(...) instead. Note that some of the default arguments are different, so please refer to the documentation for from_csv when changing your function calls\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1oAAANGCAYAAADktv9+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzs3XeYFFXaxuHnFRYUdVBBQUyIAUVdQcWAqJjziq4Jw4pZMa5+7ppW0TXvmrPrmhXMATFgAFcJIopZjCRRUVABJQzhfH9UTZ1D0w09PTXT3dO/+7r64p3q6prTM4POwzn1HnPOCQAAAACQnqWKPQAAAAAAaGwIWgAAAACQMoIWAAAAAKSMoAUAAAAAKSNoAQAAAEDKCFoAAAAAkDKCFgAAAACkjKAFAAAAACkjaAEAAABAyghaACqGmd1jZnPMbJMsz51rZs7M9s04XhU/97aZ/Wpmc81sspm9ZGaHmVnz4Nz28TXCx3Qz+8DMzjSzJg3xPhfHzPqYWe9ij6MuzKyFmfU1sx5Znusdf93bF2Fc7eJxdW7oz11MZnafmf1W7HFIUvz1d2bWuthjAQCCFoBKcqakHyTdb2Z/qDkYB69LJN3nnBsQHF9P0mhJF0h6S9JfJO0k6TRJkyTdI+nCLJ/nZknbxI+DJQ2VdL2ka9J/S7XWR1LvYg+ijlpIulhSjyzPDVT0df++IQcUa6doXBUVtAAA2TUt9gAAoKE456ab2bGSBikKSBfHgetBSZMVBTFJkpk1lfSMpJUkbemc+yzjco+Z2aWSumT5VBOccyOCj18ys40l9ZJ0dmpvCItwzv0k6adijyNNZtbCOTez2OMAANQOM1oAKopz7lVJd0g638w2l9RX0qaSjnXOTQtO3V9SJ0mXZwlZNdca75x7Js9PPU3S3PCAmS1lZn8zszHxksYfzewBM1s988Vmdky8BHG2mf1sZk+b2YYZ53Qws/5m9l18vclm9lrNUjYzGydpI0k7BEsbxy1u0PE5t5jZkWb2mZnNjMexT57vO7xWMzO7MHi/P5nZvWa2csZ5O5nZEDObamazzGyCmT0ZLxlsLx+kLg7ex33xaxdZOhhf62Mz28bMhsXXHGdmR8fP721m78Xv7SMz2yNjPOvG4/wyPmeSmQ0Il6DGyxjfiT+8NxhX3+CcP5nZ8PgaM8zsFTPbJuNz1Sx928zMnjCzXyR9HT+32O9vjq/5mfH11s3y3NVmVl2zzM7MupjZ8/HP4Zz48wzM9vNYCDPrHo93Rvw1GGZme+c4b3j8sz7JzP5pZsdlfl/rOJaNzexZM/sl/jzvm9lRGecsFf+8fh7/zPxqZh+a2RnBOSub2V1mNjH4mR5qZrukMU4A5Y0ZLQCV6BxJu0t6QtIaku5wzr2Scc6u8Z/PFXD9pSyaEZOklpL2k7SHpKszzrtd0gmSbpH0vKT2kv4pqYeZbeacmyJJZnaepCsk9ZN0nqRWigLicDPr6pz7Mr7eC5KaSPqbpAmSWkvqJmmF+Pn94/c8TdESQkmak8f72VtSV0kXSfotvv7TZtbROfdNHq+XmS0l6VlJ2ylaQjlM0lqKlmwOMbMtnHOz4l+kB0p6U9Ixkn6VtJqir18zRUsC95D0kqT/Sro7/hRLmsVqK+ne+HN/q2j55z1mtoakAxV9fafF7/EZM+vgnPsufm07SVMlnRt/npUkHSXpbTPr4pz7XNJ7ko6OP8dl8XtQ/LlkZodJeljRbGovSc3jr+MQM9vZOfdWxnifktRf0T8KLBsfW9L3N5uHFP3c9VawzNWi+wWPkDTAOTfFzJaV9IqksZJOUTTD21bSjpKWX8z182JmO8TX/1DSsYp+7vpIGmBmvZxzj8bn/TE+7wtFX+OZkk6Kx5oKM+uo6OfvR0mnK/reHiHpPjNr45yrWeL7N0V/zy6T9D9Jf5C0gRb+ej8oaTNFy4u/iJ/bTNHfUQCVzjnHgwcPHhX3UPTLrlP0i/tyWZ5/MX6+ecZxU/SPVDWPJsFz7ePXZHvcm3HuBvHxWzOuv2V8/PL44xUU/bI5MOO8NSTNlvRw/HGr+HVnLOF9fyxpSC2+Tk7RfW3LB8faSJov6dxaXOfQ+FoHZBzfIj5+cvzxn+OPN13MtVrH5/TN8lzv+Ln2wbEh8bHNg2MrSZoXf23bBcc3jc89bTGfv4miX7q/kHRdlvfSO+P8pRTd0/ehpKWC48spCjRDg2N942tcknGNvL6/Ocb7pKSJGZ97z/h6+8Qfbx5/vF8B179P0m9LOGd4/F6XC441kfRRPDaLjz2mKMy3zvj6fZL5fc3xeWq+fq0Xc06/+O/OGhnHX5D0u6SW8ccDJI1ewuebIen62n7NePDgURkPlg4CqDjx7MppkhZIWkXRL9f5OkPREsCaxwdZzrlR0QxQV0UzAucraorRLzhnx/jP+8IXOudGSvpM0s7xoW0kLZPlvImSXg/O+1nRErNzzOyseBlYWv+NH+ycmxF87smKZgPWqsU19lE0OzXAzJrWPCS9ryjI9YjPe19StaS7zOwoM+uQxhuQ9L1z7t2aD5xzPyt6D+87P3MlRV97KXhv8VjPN7NPzaxaUUCrlrSepIWWb+bQUdGs2IPOuQXBGH5TFIK2NrMWGa95MuPjunx/75W0uqRwOdvRir7uL8YffyXpF0lXm9lJZtYpz2svUTxbtpWkJ+L3LElyzs1XNCO0uqKvkSTtIOl1F8/mxuctUBTA0rKTpNfiv0Oh+xQ1WqlZzjlS0qZmdpuZ7W5mVVmuNVJS73iJ4dYWNNkBAIIWgEr0f4p+mTpM0peKlpAtk3HOhPjPzDDxiHyIei/H9b91zo2KH0Occ1cqWhJ4kJntHp9Ts7QoW3e874Ln8zrPOecUha6XFS15ek/ST2Z2k5nVdenX1CzH5igKgPlqo2h2rloLB9W5ipaotZYk59zXigLBj5JulfS1mX0d3hdToJ+zHKvOPO6cq47LpYPD1yn6/j0jaV9FoaGropCdz9dgSd/DpSStmHF8oXPr+P19Mb5ezT1pK0r6k6QH4rAjF92fuIOioHuFpE/ie7QuSSE8rKhoJjjX+5cW/nmfnOW8bMcK1SrPsVyp6L8VWyv6Gk6N7zHbInjNIZLul3Scolm7ny26z7JtiuMFUKYIWgAqSvwv9Zcq+iXzUUVLzdaVdHnGqTX3bP0pPOic+7EmRClaNpSvD+M/a2bPasLLqlnObSdpSi3Pk4uacxzrnGuraIbgekX3wfyrFuOsL1MUvZeuOR4194zJOfemc25fRfe3ba3oF9gbzOzQhh507AhFPy/nO+deds6NjL//+e7VtKTv4QJFs0khl3liod/fYOaop5mtoOgfGJormukKz/vIOXeooqDRWdKjiu5Zq2unzF8Uvcdc719a+Oe9TZbz0gwuU/MZi3NunnPuOufcZoqWmvZStGT35ZoZSOfcFOfcmc659or+UeY8SQcoYwYaQGUiaAGoGPFStfsV/SJ1hiS5qA37dZLOMLNtg9OflvSpou6EG6Tw6Ws6w/0Y//l6/OdCN/mbWVdFy9Feiw8NlzQry3mrK14Cle2TOee+cM5dpugemM2Cp2o7E5WW5xX9At8kmO0LH59nvsA5N98597ai5gySfx81DTwa6n04ZTQNibvlrZZxXq5xfa7oHq3DzMyCayyr6J604a6W7dsX8/3N5V5Fs3S9FP3jwnDn3Jgc13bOuQ+cc39VtNwzn+svbqy/S3pb0gHhzHG89PEIRQ1DvogPvyFpJws2HI7PO6guY8jwWvw52mUc/4uie/ZGZL7AOferc+4JRbOsKym6HzPznAnOuVsU/SNNnb5mABoHug4CqCTnKWpYsKdz7tfg+D8ULQm7x8w6O+dmOefmm1lPRUu1RprZfxQ1VfhF0RK4rRTNTmVr/b6mmW0d18sqWqZ4nqTxirrJyTn3uZndJek0M1ugaGlSe0VL1CYqmq2Qc+5XM/unpCvM7AFF93m1UrQx7mxFXftqurXdIulxRcshqxUFsT9KuioY20eSDjWzQyR9I2m2c+6j2nwRC9Rf0uGSXjCzGxXd2zJX0f05O0p61jn3tJmdFI97oKLlm0sr6j4oSa9KknNuhpmNl7Sfmb2maPnfFOfcuHoa+/OK7sMZo2hmcnNFnSu/zTjva0Wh+HAz+0xRU4fvnHPfmdnfFHUdfN7M7lQ0o3SOop+lc5c0gFp8f7Nyzo0xs+GKfg7XUNTtMrz+Popmx55R9HNhimZmVpCf3V2cJmZ2YJbjvzvnXow/7yuSBpvZv+Px95G0saRe8dJIKZpZ3lfSa2Z2uaKv50nynRcXKD/7mtkiM85xWLpE0T2Dgy3aC+9nRT+be0v6W7yMUmY2QFHzmFGKuk2upWivvfGSvjSzlpIGK1pOPEbRDHdXRV0xn8pznAAas2J34+DBgwePhngoCkXVku7K8fzWijrpXZdxvErRL4kj5ffCmqyoTXcfSS2Cc9tr0W6DsxTNaFwvqW3GtZdSdL/N5/HYflLcHCDL+I5VdE/QHEWzDM9I6hQ8v4qiWYuaX/BnxOefqYW7Ha6lKDxOj8c3bglfNyfplizHx0m6r5bfg6aKlqG9H39dZsTjvUPSusH34an4+rMVzT4OkbRvxrV2VnSf0ux4jPfFx3sre9fBj3O8h+eX9J4VhY274+/774paz3ePrzsk47WHxu+pWhmdERW1+R8Rv/ffFAXHbhmv76ssXfPy/f4u4et/fHztmZKqMp7rqCgwfBU//6uiWaij8rjufcrdbXNccF53RbNJv8WfY7jirocZ1+sef51mK7qX6hpFf0+c4o6AixlL38WMxQXnbaxo64ZfFf2del+Ldos8S9JQRX8v5ygKWHdLWit+vrmiLRo+UPTfhpmKAldfBf9d4MGDR+U+atqpAgAAlCQzG6QoPK9f7LEAQL5YOggAAEqGmV0nabSiJbQrKVrWt6uiWV0AKBsELQBAncRNRhZngQv2jwKWoImizqBtFS35+1TSkc65h4o6KgCoJZYOAgAKZmbtJY1dwmmXOOf61vtgAAAoIcxoAQDq4jtFndaWdA4AABWFGS0AAAAASBkbFgMAAABAylg6mIWZmaR2ivYpAQAAAFDZlle0CX3eywEJWtm1k/RtsQcBAAAAoGSsLmlSvicTtLKbIUkTJ05UVVVVsccCAAAAoEimT5+uNdZYQ6rlajeC1mJUVVURtAAAAADUGs0wAAAAACBlBC0AAAAASBlBCwAAAABSRtACAAAAgJQRtAAAAAAgZQQtAAAAAEgZQQsAAAAAUkbQAgAAAICUEbQAAAAAIGUELQAAAABIGUELAAAAAFJG0AIAAACAlBG0AAAAACBlBC0AAAAASBlBCwAAAABSRtACAAAAgJQRtAAAAAAgZQQtAAAAAEgZQQsAAAAAUkbQAgAAAICUEbQAAAAAIGUELQAAAABIGUELAAAAAFJG0AIAAACAlBG0AAAAACBlBC0AAAAASBlBCwAAAABSRtACAAAAgJQRtAAAAAAgZQQtAAAAAEgZQQsAAAAAUkbQKmEzq+ep/bkD1f7cgZpZPa/YwwEAAACQJ4JWmSB0AQAAAOWDoFWGCF0AAABAaSNoAQAAAEDKCFplLpzdmvLbbGa6AAAAgBJA0GqkWF4IAAAAFA9BqwIw6wUAAAA0rJIIWmbWx8zGmtlsM3vXzLZbwvkrmNmtZvZ9/JrPzGyvulwTAAAAANJS9KBlZodIukHS5ZK6SHpT0otmtmaO85tJekVSe0kHSuoo6XhJkwq9ZqVieSEAAABQP4oetCSdJem/zrm7nXOfOefOlDRR0sk5zj9G0kqSejrnhjrnxjvn3nLOfVCHa1Y8QhcAAACQnqIGrXh2anNJgzKeGiSpW46X/UnScEm3mtlkM/vYzM43syaFXtPMmptZVc1D0vKFvaPGgdAFAAAA1E2xZ7RaS2oiaXLG8cmS2uZ4TQdFSwabSNpL0mWSzpZ0QR2ueZ6kacHj27zfQSNH6AIAAABqr9hBq4bL+NiyHKuxlKQfJZ3gnHvXOddf0b1YmcsCa3PNKyW1DB6r5znuBnPPW+OKPQRCFwAAAJCnpkX+/FMkzdeiM02raNEZqRrfS5rrnJsfHPtMUtt42WCtr+mcmyNpTs3HZpbv+BvMbUO+TupnRn9XxJFEZlbPU6eLXpYkfXrp7mrRrNg/SgAAAEDpKOqMlnOuWtK7knbNeGpXScNyvGyopHXNLBz7+pK+d85VF3jNkrfFWism9WUDP0vqT76bXozhLIR9ugAAAICFlcLSweskHWdmx5jZhmZ2vaQ1Jd0hSWb2gJldGZx/u6RWkm40s/XNbG9J50u6Nd9rlqM7jtwsqTu0Xjapj7rnnaSePmtug45pSQhgAAAAqFRFX+/lnHvUzFpJukjSqpI+lrSXc258fMqakhYE5080s90kXS/pQ0X7Z90o6epaXLOsPXriVup6+euSpCZmmu+iW892uvZ/yTn9Rk4oytjyES47HHXhztristcksQQRAAAAjUdJ/FbrnLtN0m05nuuR5dhwSVsXes1yF95D9mSfbdTz1kVXRF476Et/zrs0UQQAAAAaUiksHUQdrL7iMkn95t96JHWndlVJfeWLnyf1za9/1SDjKkSupYYsOwQAAEC5IWg1Iss0a5LUDxzTNan/uHrLpL5/mF89+e+XfQArF9z3BQAAgHJA0KoA9/TeIqn32KhNUvd/xy8pvDzoZOhcru3GShcBDAAAAKWEoFVhLtt/46TeecNVkvrpYG+uP98+vEHHVJ/YZBkAAADFQNCqYFf/eZOk7t1traSe8POspD72vlENOqb6ROgCAABAQyFoQZJ06k7rJvVlPTdK6g++nZbU17xUfvd05cJSQwAAANQnghYWscfGbZP6xO3XTurHRvl7uh55u3T36aoLZr0AAACQhpLYRwul6/jtO+jO/42VFDXSeOmTyZKk617x+3Q9NmpiUcZW38KNlWuwqTIAAADywYwW8hY20li/zXJJfc1LXyT1Gf3fT+o58+Y3zMAaEEsOAQAAkA+CVglr0aypxl21t8ZdtXfJzaI8fNyWSb11h5WSeuhXU5O6x7/eSOpxU39vmIEVCUsOAQAAECJolYlSC11mltS3HNYlqf9vt/WTeu58vx/XgbePSOr+IycG5yyoryEWDaELAAAABK0yVGqhK3Tolmsk9TN9tknqJkv5YPbvQX6pYferhyT1+Kkz63dwRcBSQwAAgMpE0CpzpRy6Vl+pRVK/fGb3pA43Sp6/wM96hRslv/XVlHoeXXERwAAAABo3glYjUsqha4UWzZI63Cj5+dO2TWoLzj+z/wdJfeojo5O6MS41DBHAAAAAGgeCViNVyqEr1Lbl0kn99Cndknq9VXxXwxHf/JzUYYONp96bVM+jKx3c9wUAAFBeCFoVoFxC1+orLpPU/U7YKqnP2d032Jgzz89oXfHCmKQ+4u6RSf3rzOr6GmJJIHQBAACUPoJWhQlDV+vlli6LAHZIV99g4/GTtk7qbddtldRjfpiR1Ltc92ZSv/zJD/U8uuIidAEAAJQmghYklc+s19qtl03qGw/tnNRXBJsphy54+pOkfnzUt/U3sBKQ6/6ufGpCGgAAQLoIWlhEuYSu0G4btUnqV8/aLqk3aLt8Ul/90udJfdZjvtnGpF9m1fPoSh9NOAAAANJF0MJilWPoCjscPnTclkm9fhvfYON/X/j28fvdOiyp+42cUM+jKy8EMAAAgMIQtFAxHjneN9g4d8+OSR1upnztoC+T+oDb/L5eWFg+yxQJYwAAoJIRtJC3cpzdyuXAzVdP6jfO2SGpwwYbE36eucjr+jzs9/SaPXd+PY2uccjVqINZMgAAUAkIWihIYwpdS/+hSVKHDTZuPazLIueOHOv39Nrx335Pr6FfTVnkXHj5dEckgAEAgMakvH9DRkmoCV01aupy/wV5qw4rLXLs73t0TJpqzJ3vkuNn9PfNNa4d9EX9D66CzKyep04XvSxJGnXhztristcWW3966e5lH/4BAED5Y0YL9aYxzXrVOGgLv+TwmVO6JfUa4WbLIycm9YG3+/u8Ro3zs2GoP+wtBgAASgFBCw2iMYau1YNw9XQQusIwNm6qv8/rpIf8/V0H3OY7HQ4e82N9DbHidbroZZYiAgCAomgcv/GirDTWpYY1/r5Hx2Rz5OsO/qPOeuxDSVL7Vi2S4DXhZ7931zlPfJTUR9w9MqlHjfulIYZbcXItRWTJIQAASBMzWkA92n79lZP6iZO3SepbevmmG51W9Zsqj/lhRlKf9NB7SX3kf30A+3jStNTHCVrWAwCAdBG0UDLC5YWtl1u60S01DG29jm8j/8CxflPlqw7YOKnXXMkvTfzsex/Aet87KqkfG+XvB0P9yyeMEcwAAIBE0EIZaIz3d+WyS6c2Sf1UH3/f11V/9gFsxRZ/SOprXvIdDp96b1I9jw61Rct6AAAqF0ELZaWSQldolw19ABv01+2SusPKyyb1FS+MSep9bx6a1JcM+DSpWXZYGlimCABA41c5v6mi0WnsTTVyMbOkfvSErdT18tclSVustaJGjY8aaHw/bXZyzoAPvk/qcNnhGf3fT+o3vvip3saLwtC0AwCA8saMFhqdSpr1CkPXHUdultT3Hb1FUp+y4zpJHS47HPrV1KQ+O+6MKEm73/BmUt/5xjdJPWXGnBRGjLpiOSIAAOWBoIVGrZJCV2jj1Vom9dHbtk/qcNnh+XttkNQbtPWdD6f+Vp3U/3lzbFLvceNbSX3c/X5m7PkP/YwZiqe2jToIaQAA1C+CFipGJXU1zCWcATtgs9WS+qHjfOfDB47pmtQ9O7dL6qX8S/X+RH+vV9/n/D1gB9w2PKlHfONnzFDa6KYIAED6CFqoeJU665VLp3ZVSX3hPhsm9bBzd0zqsA395mutkNQTfp6Z1Kc+4u8Bu3aQ74741Y+/JfWM2XNTGDEaGrNnAAAsGb9VAoFsDTbCpgSVrGkT/+8yu3RqIz31sSTpziM3Txo13HpYF53yyGhJ0uorLqNvf5klSeo30u/3dehdbyf1jv/+X1IfdIefDbt/2Pikds6l+TZQZLmafNSg8QcAoLHg/2DAElRqd8NCbNVhpaR+5pRuyS/M+3dpp6dHfycpasjxy8xFZ7LGTvGzYTe//lVS73StD2P/eOaTpH75kx+Sev4CwlhjROdFAEA5Y+kggHp3wd5+CeIrZ22f1OFyxNsP75LUe2zk9w2bMdsH2hc/9uHqgqd96NrmyteT+tYgpKFxYh8yAEA5IGgBBaK5Rt01a+r/E9R1bT8bdtn+/h6wR473jTr+uut6Sd15Dd9ZMZzQujdYdlgj3LR5yOd+z7BfZ1Yvci4aB8IYAKDYCFpAyghg6Vq/jW89f/hWayb13Uf5vcJeOqN7Uu/fxXdKrBFu2vx/j/s9w3a5zu8Zdt5THyX1F5Nn1GHEKBeEMQBAfeI3P6CBcK9X/Wm9fPOkvmDvDZP7wWqctEMH3RFvvrzJalX6aNL0Ra7xyqc/JvVh/xkZ1L55x0vB0sU58+bXfeAoebnuE8un5l4yAKhszGgBRcYMWP07bru1k/reo/0+YUPP7ZHUp+60TlKvtOwfkvqLyb4d/YVBM45trxqS1Gf0963sn33fh7zqeQsKHzTKXl3a4Nel5h9vAKA0ELSAEkUAq3/NmzZJ6t7d2if1oL/6hh3XHvzHpA73DAsN/cpvzvzP5z9L6u5XD07qu98cm9SzqpkNQ/1JK+AR2ACgbghaQJlhg+WGtcP6Kyf1nUduntSvn+3D2IV7b5DU3dZpldRhk46apYuStN01Q5K6563Dkjrc2HnoV1MKHzSQgnwCGwENAHIjaAFljNBVPFXL+OWFPbusltQ39eqc1C+d6Zt07NbJt6wP1WzqLC28sfMZ/T9I6r1vfCupR3ztZ8+AUpQroBHAAFQaghbQSORaasiyw+JpvZxv0nHFAb5l/Zt/65HUd//Fz5IduY3vqtixre+2OHnGnKQ+tZ+/H2znYDPnvz3huyl+PGlaHUYN1I+6LGkkpAEoRwQtoIIwA1Yalmnm7w3rvKa/7+uMnf0+YQ8f5/cPu+vIzZJ6jRWXSepps+Ym9etj/P5gve8dldQnPPBuUl8+0N8/dvVLnyd12E1xUjDDBpSK+mgsQngDUN/4TQuoULnazYc1v4iUhs3WWjGpnz6lW9I+/LETt9LBd0bt58/adT1d98qXkqTWyzXTlN+izZjfm/Crf23Q9v7xUd8mddhNcb/gnrH9bhma1LcO/jqpv/rRd2KcH96IBpSRurTuL8e6ZruB8H3XdguCXF8ztjIAsmNGC0BOLEcsbR1WXi6pDws2c37pzO2S+p/7bZTUJ+3QIamP694+qcNuis2b+v8tTPp1dlLfO3RcUh96l99bbKsrXk/qg+8ckdTXx6FPWnjGbIEjmAHFUDMrWBOUwmN1nQVkxhHIjqAFoE5Yjlja9tykbVKH+4md1MPvGxZ2Uxx67o5JffdR/vhBW6ye1C2DRiChb376PakffntCUoczZtsHHRfDVvg1Ro37OakJZUDlKtY+dPW9t11t3xfBs7wRtACkhr2/GpfOa/iZrr/v0TGpXwta2796lp89u/WwLkkdNvbo2t4vfZw912/iHG7uXOOkh0YnddjsY/CYH5PaEcAAlJEwXBUamEo5eBICcyNoAah3BLDGa4UWzZJ6qw4rJXXY2OP2I3wzjydO3jqpT+7hlzLWWLt1i6SeMdv/z/ucJz5K6p2CAHbz618l9aBPJif1+Kkz83sDAIA6qe8QWM5BjqAFoGi4B6zytG+1bFIf233tRZ5//KRtkvr+Y7om9carVSV1GMDuHzY+qc9/+uOk/vPtw5N6u6uHJPVx9/uOjHf9z28i/c5Yv2Rx9IRfknr23Pk53gkAAItH0AJQ0ghjlWujdj5c3Xe0D139jvet73ttuUZSbxa0yl+2uW+hPysIS+9P9HuM3fW/sUl98sN+yeLxD7yX1GFIC+8pG/CBX/b47ngfzH6Y5huIzJvvl0kCACoPQQtA2csWxj69dPdiDwv1ZL02fjPns3dbP6nvCjZ/fuOcHkn9TB8/S3bVn/3G0T07t0vqdVb2M21rruSXL4Z3g4X3lF0ywIeuEx/0wWyfm30ek4I5AAAgAElEQVRL/K2vHJzUu9/wZlJfEMy83RosfbzhVd+p8c43/GzbwA+/T+pwM+p5CwhyAFDKCFoAGqV8ZsKYFasMqwfBaZcN2yT1hftsmNSPnujvHXsqCGYvn9k9qcP2+N3WaZXUa7Xy1/9DE8s6hqnxvmaS9HJwL9m9wdLHh0b4To3/edPPtl383KdJHW5Gvc0Vg4Pj7yT1qY/42bkLg1B36QB/nfOf8sfD2TmWSgJAeghaACAadiC7Vss1T+qwPf5NvTon9ZMn+2A2/LydkjrszvjwcX6545m7rJvU4dLHsFPjQZuvltRbru2bjKzacumkDmfbPp40PalHfOPvN3spCHXPfeBnxgZ96o+Hs3Pdg6WS4SxcuEfa6f3eV6b7gn3Wvpg8Y5HnAaASEbQAYDEIYChUuN9Yx7Z+ueMRW6+V1OHSx7BT49/33CCpbzvct80fcNq2SR3Otv37oD8m9SV/6pTUf93VX/OUHf3eaWfv5o+H7fdD4SxcuEfasK+nLnLuLYO/TurD/jMyqcOA9n+Pf5jUN73ml0y+8JEPgOE9bgBQ7ghaAFAAmnSg2MLZth4dV07qvf+4alIfvpWfJTt62/ZJ3WtLfzxsvz/knB2S+pGg6cjtQdi7eF+/5LLGPsHnbLmM/7kPA9qQz39K6geG+yWTFz3rlzSG97jtc5Ov/xFsen13sKwynEl7aIS/Ztjqf/J0whuA4iBoAUA9CcNYGLpyHQeKbbnm/udx/aDpSNdg+eK+m7ZTpr7BLNprZ/uwFs7Gnbun3/Q6DIBbBjNqTZfy97j9EASkFz/+IanvCBqFhDNpN7zqZ8nCVv97B4Ft3yDIXfSsD2/hfWpf//RbUtNwBEBdELQAoAHkE7qYGUNjE95fduDmqyd1uKTxtmBGbfh5Oyb1fUdvkdRn7Ozva9u/iw96f9rUz6TttUnbpA5b/TcJwtv3wdLEFz7y4S28T+2QO99O6q2DhiPhMsjLB2Zv9f9e0Or/7eBeuZc/8Z/rpSA0/u8LP8v3yXfTs9Zhp8lxU/wM4U8z5ghAaSNoAUCJI4yhUpj5ULTxai2T+sht/H1tF+ztly5etK+fSbt0v42SOmz1PyJHeDs9CG9hF8nw3rpQuAzy6dHZW/2fELT6PyXo/njB03727MJgGeRZj/n71o66552sddhp8sA7fNjb88a3knr3633jkrBZSVhf/eKYRd7TLcH2Ate/4rcXuOalz5P6ihf86y4JOleGyznDjpbh1gTPBF+n4cG9fd8Es4a/z/EbkAONDUELABoBmnYA2eUKb38JwlvYRTLsFvnqWb6+9TC/DPLE7X0Hym06+Fm7sNX/uqssl9RbrOWXR4ZLJcNNudtU+Xvuwu6S7YK6amn/97lJ8L6m/u4bl4TNSsL68XcnKdN9wfYCD7/ttxd4bNS3Sf3Ue/51A4LOleFyzrCjZbg1wWXBzN9pQeg7OJg13OFfbwT1kOCc7J0uLws2Dh885sek/nXm3KQOm6qMDWYBv/91VtZzZsz2rw2FS0dnVmcPhPMX+P6f3wXX/y1HgFzg/Plza7GpuQtex2bo5YOgBQCNWG33EyOkAd4KLfzs1lZBoDp+e7+n2s1BAAtb/fc/YaukvuNIvzwyXCp5/zFdk3rg6b6LZNhd8rmgfv3//P1vb1/gtxIIG5f0DWb5wsYlx3Vvr0yHbeW3Fziq21pZzw33jzt1J9+5MldHywODrQm2W691Uq/fxgfPXLOGv8/x+7jl6nT5TLBx+DlPfJTUu1z3v6QOm6ocFMwC7nvLsKzn7Phv/9odrhmS1OHS0e2v8YFwmytfT+qtrvD1n4Lr9wgCZM9b/fFuwUbm2wT1btf7MRxw23Bl6nq5/zzhZuiHBIH0n0EIfSQIzs+M9mE57PIZNpYJZyJfDJbVjvhmatY6XBobLpn9/Ae/vQOBkKAFAMiBTZ+B8hA2LtknuG8tbFxyUo91lOmsXf32AqfttG7Wc8P943p3a5/UuTpanhtsTXD9IZsm9SPH++AZzhoOPbdHUoebhYedLsNmKyf38MFvw1X9+w41b+p/vQ1DXXg81+biv1cvedPuufNd1uPh9UPf/uJnuuYtyP7an3/3s2oTfp65xDHU+DoIpM8GIfS6YCnoZQP98s+wy2fYWCacifxH0Cjm1Efez1qHS2PDJbOH3+23d+h2lQ+EfR7y5/QNNmG/Mliaet0rXyT1bUGjm3JG0AIApIJ7yQDUVvOmTZJ6zZX80suw02W4fcCx3X3we/BYP5P39vl+hm/ouf6+vIVDnT8ebi4+LDj+dBD2wqWjb/29R1IPPH3brOeE1w/Pv/sof8/g8+EMZTC2fsGs5H/+4mc9a4T75uVa0hrOPu7WqU1ShzOLYYOasLHMgTk2SQ9nItdbJXsdLpltvVyzpA4z5chxftbr+Q/9rNqTwdLUR96emNT3BFs3lDOCFgCgweQKY4QyAHURdpesrWbBTNQaQdgLl44u/QcfCNtULZ31nFB4fuc1fBfMtuE9d8Fs23rBrGSXNRfdRDzcNy/XktZw9vGKAzZO6nBmMdxyIWwsc26OTdLDmch+J2SvwyWzL525na/P8OHw0v38rGS4BPX4YMzhfZOHdPVdSssZQQsAUJLYbwwAylfr5X043GsTPysZLkE9MZiFCzuBnrO733evnPF/LgBAyasJXTUKrXN1Dsv1ufI5HwCAbAhaAICKkW9gq+35BDMAQCaCFgAAKUlr5i2sCW8AUJ4IWgAAlLD6CG9hTZADgPpB0AIAoILVNcgV+jqCHoDGjqAFAACKJp+gF4axXOcT2ACUGoIWAAAoaZnhKp9zmFUDUGwELQAAUNGYJQNQHwhaAAAAWdR2WSMAhAhaAAAABarvrpBp1zOr56nTRS83+NgJpKhEBC0AAIAKkc/9bg3xeQlvtRN+/SrpfZc7c84Vewwlx8yqJE2bNm2aqqqqij0cAAAAoGyFM6mjLtxZW1z2Wt71p5furhbNijs3NH36dLVs2VKSWjrnpuf7OoJWFgQtAAAAAFLhQWup+hsSAAAAAFQmghYAAAAApKzoQcvM+pjZWDObbWbvmtl2izm3t5m5LI+lg3Oamtll8TVnmdk3ZnaRmRX9vQIAAACoDEW9s8zMDpF0g6Q+koZKOlHSi2bWyTk3IcfLpkvqGB5wzs0OPvy7pJMkHSXpE0lbSLpX0jRJN6b6BgAAAAAgi2K3dz9L0n+dc3fHH59pZrtLOlnSeTle45xzPyzmmttIetY5NzD+eJyZ9VIUuLIys+aSmgeHls9r9AAAAACQRdGW05lZM0mbSxqU8dQgSd0W89LlzGy8mX1rZs+bWZeM59+StLOZrR9/nk0ldZf0wmKueZ6iGa+ax7f5vxMAAAAAWFgx71tqLamJpMkZxydLapvjNWMk9Zb0J0m9JM2WNNTM1gvOuVpSP0ljzGyupNGSbnDO9VvMWK6U1DJ4rF6rdwIAAAAAgWIvHZSkzI28LMux6ETnRkgakZxoNlTSe5JOk3R6fPgQSUdIOkzRPVqdJd1gZt855+7Pcd05kuYE1y3ojQAAAACAVNygNUXSfC06e7WKFp3lyso5t8DM3pEUzmj9S9JVzrn+8ccfmdlaipYHZg1aAAAAAJCmoi0ddM5VS3pX0q4ZT+0qaVg+17Bo6qmzpO+Dwy0kLcg4db5KoJU9AAAAgMpQ7KWD10l60MxGSRou6QRJa0q6Q5LM7AFJk5xz58UfX6xo6eCXkqoULRfsLOmU4JoDJF1gZhMULR3soqi74T0N8YYAAAAAoKhByzn3qJm1knSRpFUlfSxpL+fc+PiUNbXw7NQKku5StNxwmqJGF9s750YG55wm6Z+SblO0DPE7SXdKurQe3woAAAAAJMy5rH0nKpqZVUmaNm3aNFVVVRV7OAAAAACKZPr06WrZsqUktXTOTc/3ddy3BAAAAAApI2gBAAAAQMoIWgAAAACQMoIWAAAAAKSMoAUAAAAAKSNoAQAAAEDKCFoAAAAAkDKCFgAAAACkjKAFAAAAACkjaAEAAABAyghaAAAAAJAyghYAAAAApIygBQAAAAApI2gBAAAAQMoIWgAAAACQMoIWAAAAAKSMoAUAAAAAKSNoAQAAAEDKCFoAAAAAkDKCFgAAAACkjKAFAAAAACkjaAEAAABAyghaAAAAAJAyghYAAAAApIygBQAAAAApI2gBAAAAQMoIWgAAAACQMoIWAAAAAKSMoAUAAAAAKSNoAQAAAEDKCFoAAAAAkDKCFgAAAACkjKAFAAAAACkjaAEAAABAyghaAAAAAJAyghYAAAAApIygBQAAAAApI2gBAAAAQMoIWgAAAACQMoIWAAAAAKSMoAUAAAAAKSNoAQAAAEDKCFoAAAAAkDKCFgAAAACkjKAFAAAAACkjaAEAAABAyghaAAAAAJAyghYAAAAApIygBQAAAAApI2gBAAAAQMoIWgAAAACQMoIWAAAAAKSMoAUAAAAAKSNoAQAAAEDKCFoAAAAAkDKCFgAAAACkjKAFAAAAACkjaAEAAABAyghaAAAAAJAyghYAAAAApIygBQAAAAApI2gBAAAAQMoIWgAAAACQMoIWAAAAAKSMoAUAAAAAKSNoAQAAAEDKCFoAAAAAkDKCFgAAAACkjKAFAAAAACkjaAEAAABAyghaAAAAAJAyghYAAAAApIygBQAAAAApI2gBAAAAQMoIWgAAAACQMoIWAAAAAKSMoAUAAAAAKSNoAQAAAEDKCFoAAAAAkDKCFgAAAACkjKAFAAAAACkjaAEAAABAyghaAAAAAJCyogctM+tjZmPNbLaZvWtm2y3m3N5m5rI8ls44bzUze8jMpprZTDN738w2r/93AwAAAABS02J+cjM7RNINkvpIGirpREkvmlkn59yEHC+bLqljeMA5Nzu45orxtQZL2lPSj5LWkfRr6m8AAAAAALIoatCSdJak/zrn7o4/PtPMdpd0sqTzcrzGOed+WMw1/y5ponPu6ODYuDqPFAAAAADyVLSlg2bWTNLmkgZlPDVIUrfFvHQ5MxtvZt+a2fNm1iXj+T9JGmVmj5vZj2Y22syOX8JYmptZVc1D0vK1fT8AAAAAUKOY92i1ltRE0uSM45Mltc3xmjGSeisKU70kzZY01MzWC87poGhG7EtJu0u6Q9JNZvaXxYzlPEnTgse3tXkjAAAAABAq9tJBSXIZH1uWY9GJzo2QNCI50WyopPcknSbp9PjwUpJGOefOjz8ebWYbKQpfD+QYw5WSrgs+Xl6ELQAAAAAFKuaM1hRJ87Xo7NUqWnSWKyvn3AJJ70gKZ7S+l/RpxqmfSVpzMdeZ45ybXvOQNCOfzw8AAAAA2RQtaDnnqiW9K2nXjKd2lTQsn2uYmUnqrChc1RiqjK6EktaXNL6wkQIAAABA7RR76eB1kh40s1GShks6QdHM0x2SZGYPSJrknDsv/vhiRUsHv5RUpWi5YGdJpwTXvF7SMDM7X9JjkraMr3tCQ7whAAAAAChq0HLOPWpmrSRdJGlVSR9L2ss5VzP7tKakBcFLVpB0l6LlhtMkjZa0vXNuZHDNd8xsf0X3XV0kaaykM51zD9f3+wEAAAAASTLnsvadqGhxi/dp06ZNU1VVVbGHAwAAAKBIpk+frpYtW0pSy7ifQ16K2QwDAAAAABolghYAAAAApIygBQAAAAApI2gBAAAAQMoIWgAAAACQMoIWAAAAAKSMoAUAAAAAKSNoAQAAAEDKCFoAAAAAkDKCFgAAAACkjKAFAAAAACkjaAEAAABAyghaAAAAAJAyghYAAAAApIygBQAAAAApI2gBAAAAQMoIWgAAAACQMoIWAAAAAKSMoAUAAAAAKSNoAQAAAEDKCFoAAAAAkDKCFgAAAACkjKAFAAAAACkjaAEAAABAyghaAAAAAJAyglYpq/5d6tsyelT/XuzRAAAAAMgTQQsAAAAAUkbQAgAAAICUEbTKRfVMlhECAAAAZYKgBQAAAAApI2iVi5/HFnsEAAAAAPJE0CplC+b7+onevmYZIQAAAFDSCFqlbKkmvp4+qXjjAAAAAFArBK1ysewqvp47q3jjAAAAALBEBK1yceC9vh5wuq9ZRggAAACUHIJWuVi5o6+/GVy8cQAAAABYIoJWObImSz4HAAAAQNEQtEpZs2WlvtOiR7MW/vjuV/p69IMNPy4AAAAAi0XQKkcbH+Dr1y/zNfdrAQAAACWBoFXu3PwlnwMAAACgQRG0yl2bTXw9Z0bxxgEAAAAgQdAqF7nu1+p5u68f7+1rlhECAAAARUPQKnfLt/X1Dx8UbxwAAAAAEgStxqRFK1///pOvmd0CAAAAGhRBqzE55BFf9z+seOMAAAAAKlzTYg8ABai5X0taeIaq1Tq+/mVsw44JAAAAQIIZrcZqhTV9/cs4X7OMEAAAAKh3BK3G6tB+vu7fq3jjAAAAACoQQauxWq6Nr8PGGAAAAADqHfdolbtc92uF2mwsTf44qr8PWsBXz5SuaBfV538XXQsAAABAnTGjVQkOftDXj/+leOMAAAAAKgQzWo1Jrtmt5sv7OtesF7NbAAAAQGqY0ao07bv7+ps3ijcOAAAAoBEjaFWannf6+pmTsp9DC3gAAACgTlg62FjlWkbYtLmvF8xt2DEBAAAAFYIZrUrWqaevh99avHEAAAAAjQxBq5LteY2vh15fvHEAAAAAjQxLBytBrmWEFuTsJs2k+dVR/fM3/jjdCAEAAIBaY0YLkV6P+vqRg4o3DgAAAKARIGgh0nYTX8+elv0cuhECAAAAeWHpYKXJtYwwtP6e0hcvRvUH/RtmXAAAAEAjwowWFrXvjb5+5R/FGwcAAABQpghaWFTYJEOuaMMAAAAAyhVBq5LVLCPsO01q1iL7OZv28vV7D/ia+7UAAACAnAhaWLxdLvH165cWbxwAAABAGaEZBiL57LUVmj/X1+y1BQAAACyEGS3kb9+bfU2TDAAAACAnghby13FPX3/8RPZzuHcLAAAAYOkgsshnry0AAAAAOTGjhcJscayv3769eOMAAAAAShBBC4XZ4e++fvPa7OewjBAAAAAViqWDWLx8uhE2bS7NmxPVkz9puLEBAAAAJYoZLdTd4U/5ut+hxRsHAAAAUCKY0UL+cs1urdzR1/Nm+do5X7PXFgAAACoIM1pIV5cjff3C2cUbBwAAAFBEBC2ka+eLff3Zc9nPoUkGAAAAGjmCFupP8ypf/zqheOMAAAAAGhhBC4WpuV+r7zSpWYvs5xz+pK/792qYcQEAAAAlgKCF+rPS2r7+bXL2c1hGCAAAgEaIroOou1zdCEMrbyD9NCaqvx7cMOMCAAAAioQZLTSMgx/y9dPHF28cAAAAQAMgaKFhLLNC9uPz5viaZYQAAABoJAhaSFc+TTL2+revn+3TMOMCAAAAGlBJBC0z62NmY81stpm9a2bbLebc3mbmsjyWznH+efHzN9TfO0CtdOrp67FvZD+H2S0AAACUsaI3wzCzQyTdIKmPpKGSTpT0opl1cs7l2nxpuqSO4QHn3Ows1+4q6QRJH6Y6aOQnnyYZTZeW5s1e/DkAAABAmSmFGa2zJP3XOXe3c+4z59yZkiZKOnkxr3HOuR/CR+YJZracpIclHS/pl3oZOepu/7t8zV5bAAAAaCSKGrTMrJmkzSUNynhqkKRui3npcmY23sy+NbPnzaxLlnNulTTQOfdqHuNobmZVNQ9Jy+f7HlBHawXf5h8/zX4OywgBAABQZoq9dLC1pCaSMneznSypbY7XjJHUW9JHkqoknSFpqJlt6pz7UpLM7FBFAW6LPMdxnqSLazVy1E4+ywhX6iD9/E1Uj3uzYcYFAAAA1INSWDooSS7jY8tyLDrRuRHOuYeccx84596UdLCkLySdJklmtoakGyUdnu2+rRyulNQyeKxe+7eAOuv1mK+fPK544wAAAADqqNgzWlMkzdeis1eraNFZrqyccwvM7B1J68WHNo9f/66Z1ZzWRNL2ZnaqpObOufkZ15gjKdnQKXgd6kOu2a1wr63wW+SCzF09U7qiXVSf/110LQAAAKDEFHVGyzlXLeldSbtmPLWrpGH5XMOiVNRZ0vfxodckbRIfq3mMUtQYo3NmyEKJ2uZUX790bvHGAQAAABSg2DNaknSdpAfNbJSk4Yrasa8p6Q5JMrMHJE1yzp0Xf3yxpBGSvlR0j9bpisLUKZLknJsh6ePwE5jZ75KmOucWOo4Stu2Z0vBbovqTJ4s7FgAAAKCWih60nHOPmlkrSRdJWlVRSNrLOTc+PmVNSQuCl6wg6S5Fyw2nSRotaXvn3MiGGzVSk9deW82lefHKzllBp36WEQIAAKBEFT1oSZJz7jZJt+V4rkfGx3+V9NdaXr/HEk9C6TroQanfwVHd79DijgUAAADIQ6l0HQRyW20zX//8dfZz2GsLAAAAJaQkZrQASfktI2y1njT1y6hmry0AAACUKGa0UF569fd1rr22mN0CAABAkTGjhdKUa3Zr6Za+Djv1z5sjAAAAoFQwo4Xyte2Zvn5o/+KNAwAAAMhA0EL5Cjc1nvKFr53zNcsIAQAAUAQsHUTpy6dJxto9pLFDovqFsxtiVAAAAEBOzGihcTjgP77+7LnijQMAAAAQM1ooN7lmt8x8vezK0u8/RfX4Yf549UzpinZRff530bUAAACAesCMFhqfI5/19ZPHFG8cAAAAqFgELTQ+y63i6wXzfE2TDAAAADQQghbKV80ywr7TpGYtsp+z7V99PfT6hhkXAAAAKh5BC43bNqf4esRtxRsHAAAAKgrNMNA45NMCPjTzZ1/TJAMAAAApq/OMlplVmVlPM9swjQEB9WaHc319z67FGwcAAAAavVoHLTN7zMxOjetlJI2S9JikD83szymPD6i9XPdudT3O17On+fr3qb6mSQYAAABSUMiM1vaS3ozr/SWZpBUknS7pwpTGBdSvXS7x9UM9izcOAAAANEqFBK2WkmpucNlD0pPOuZmSBkpaL62BAanINbvV+XBfz/je17SABwAAQAoKCVoTJW1jZssqClqD4uMrSpqd1sCABtNhR18/fULxxgEAAIBGo5CgdYOkhyV9K+k7SUPi49tL+iidYQENaP87ff3N4OznXNGOmS0AAADkrdbt3Z1zt5nZSElrSHrFObcgfuobcY8WypEF/97QuqM05fOofvm84owHAAAAZa+gfbScc6MUdRuUmTWRtImkYc65X1IcG5CufPbaOuIp6YaNovqjxxd9nj23AAAAkIdC2rvfYGbHxnUTSW9Iek/SRDPrke7wgHqSq0lG0+a+Xn7Vhh8XAAAAGoVC7tE6UNIHcb2vpLUlbaDo3q3LUxoXUHxHDVz0WPXMhh8HAAAAyk4hSwdbS/ohrveS9Lhz7gsz+6+ivbSA8pJrSeHSVYue+/iRvmYZIQAAAHIoZEZrsqRO8bLBPSS9Gh9vIWl+WgMDStL3Hyz5HAAAAFS8Qma07pX0mKTvJTlJr8THt5I0JqVxAcWxpIYZy7eVZsQTuj987I8zuwUAAIBArWe0nHN9JR0n6S5J2zrn5sRPzZd0VXpDA0pQr8d8/ciBxRsHAAAASlqh7d2fyHLs/roPByghNbNb1b/72aqqdv75BfN8PW2Sr5ndAgAAqHiF3KMlM9vBzAaY2Vdm9qWZPWdm26U9OKCk7fkvXz/Us3jjAAAAQMkpZB+tIxQ1wJgp6SZJt0iaJek1Mzss3eEBJSDXnlsb7e/rWcFe3c75unqm1Ldl9Mi1STIAAAAanUJmtC6Q9Dfn3CHOuZucczc65w6RdK6kf6Q7PKBMdApmtJ48pnjjAAAAQEkoJGh1kDQgy/HnFG1eDFSecBnhuDd9vSDY8YDZLQAAgIpRSDOMiZJ2lvRVxvGd4+eAxitX+3czX6++pfTtyKh+tk/DjQ0AAAAlo5Cgda2km8yss6RhivbS6i6pt6Qz0hsaUKYOeUi6dv2o/vq14o4FAAAARVHroOWcu93MfpB0tqSD48OfSTrEOfdsmoMDSlrO2a1gRW6L1tLMKVE96T1/nBbwAAAAjVpB7d2dc08757o751rFj+6SXjCzNVMeH1DeDn/S14/SlBMAAKBSFBS0cugkaWyK1wPKX8vVfB1ucFw9c+GaJhkAAACNSppBC6hcufbaCu14oa8f7dUw4wIAAEBRELSAhrJ5b19P/qRowwAAAED9K6TrIIDFydUkI9RqPWnql1H9ydP+OE0yAAAAGoW8g5aZ/XEJp3Ss41iAynHYY9LNXaL6xXOKOxYAAACkrjYzWu8r2jPLsjxXc9ylMSig0cg1u9V8+eCk4K/OtEn+MLNbAAAAZas2QWvtehsFUMkOvFd6ondUP/znog4FAAAA6cg7aDnnxtfnQICK1b67r2s2N87E7BYAAEBZoRkG0FDyaZLRYUfpm8FR/fplDTMuAAAApI727kAp6XmHr9+7L/s5bHAMAABQ8pjRAooh1+zWUk183aK1X0r4zt0NNzYAAADUGTNaQKnqPdDXb1xVvHEAAACg1pjRAoot1+xWi1a+/kMLae7MqP5sgD9OkwwAAICSVOugZWajlX2/LCdptqSvJN3nnBtcx7EBqPGX56T/7hLVA/9a3LEAAABgiQpZOviSpA6Sfpc0WNIQSb9JWkfSO5JWlfSqme2X0hgBrNje1xbcxzVhRIMPBQAAAEtWyNLB1pKudc79MzxoZhdKWss5t5uZXSLpH5KeTWGMQOXIpwX8YY9KDx8Y1Y8d6Y+zjBAAAKBkFDKjdbCkflmO94+fU/x8x0IHBWAxVu0cfBCs4v1lXEOPBAAAADkUErRmS+qW5Xi3+Lma684pdFAA5Ge3+k6TmrXIfk7P2339YE9fs9cWAABAURWydPBmSXeY2eaK7slykraUdJykK+Jzdpc0OpURAsi9pHDdXX1d/Zuv589tmHEBAAAgq1rPaDnnLpN0vKJwdZOi4LWlpOOdc5fHp90had+0BgkgD12P9+SvqYoAACAASURBVPWjh/ua2S0AAIAGV9A+Ws65hyU9vJjnZxU8IgCF2eHv0jv/ierv3ivuWAAAACpcwRsWx0sHN1S0dPBT5xxLBYGGkE9nwlU2lH78LKoHX+6P05kQAACgQRSyYfEqijoM9pD0qyST1NLMBks61Dn3U6ojBJBbrtDV63Hpxo2j+t17s7+W0AUAAFBvCuk6eLOkKkkbOedWcs6tKGnj+NhNaQ4OQIH+sLSvl13Z169d0vBjAQAAqECFLB3cQ9IuzrnPag445z41s1MkDUptZABqJ9fsVu8XpFu7RvXoB/1xt6DhxgYAAFBhCpnRWkpStt7Rcwu8HoD6tMyKvl5pHV/3O8TXdCYEAABIVSHB6HVJN5pZu5oDZraapOslvZbWwADUg6MG+Pq7oH/N/OqGHwsAAEAjVkjQOlXS8pLGmdnXZvaVpLHxsdPTHByAAtUsI+w7TWrWwh9v0szXHff29eNH+ZrZLQAAgDqr9T1azrmJkjYzs10lbaCo6+CnzrlX0x4cgBTkundr3xulzwdG9bfvNPy4AAAAGrGC99Fyzr0i6ZWaj81sDUmXOOeOSWNgABrQiu2lX8ZF9asX++O0gP//9u48TK6qzv/4+0uAsKUbAdmJKCLgMqC4ALIpIAiCCjOIArIp7qMy6gjjgj9HcBQRBRHZjCwqIDvKKrsQBRSQfTEga9hCd0hIQpLz++NWeW6quzrdSXUtXe/X89TDp2+dW31K79Pd33zPPSVJkrRIGrl5xUrAfgsdJal16i0p3PvcnG8/M+f585o3N0mSpDHEXQIlwTK9Oa/25pzP3idn792SJEkaNgstqVvV627tc17O3rslSZK0SCy0JC0oSj8W1nxrzjf+OGe7W5IkSUMa9mYYEXHeQoasuJhzkdRu9voNHL1hkSf/rLVzkSRJ6iAj2XWwbxjPn7YYc5HUKvW2gF9iyQXz/LlF7nuieXOTJEnqQMMutFJKB4zmRCS1iXpF179PyptjnP7BfNwt4CVJkgbwHi1JwzNxs5xnvZizW8BLkiQNYKElqb56OxNusnfOvys1u90kQ5IkCbDQkrQotv9Ozv+8qXXzkCRJalMWWpIWz0rr5XzJl3O2uyVJkrqYhZak4RnOBxzfd3HO815p3twkSZLajIWWpMVT3mVw7XfkfOYeOdvdkiRJXcZCS9LI1etufeTXOT9zT85pfvPmJkmS1AYstCQ1TkTO6++Y83kH52x3S5IkdQELLUmLp153a7fjcp5ybdOnJUmS1EoWWpJGR7m71btOzjf+uPlzkSRJarK2KLQi4rMRMSUiZkXEbRGx1RBj94+INMhjmdKYQyPiloiYHhHPRMQFEbFBc96N1MXqdbf2vSDnyT/L2WWEkiRpjGp5oRURHwGOAb4HvBW4Abg0IiYOcVo/sEb5kVKaVXp+G+BnwGbADsCSwBURsXztC0lqgmV6c172VTlf9vWcLbokSdIYsmSrJwAcApySUjq58vWXImJH4DPAoXXOSSmlp+u9YEppp/LXEXEA8AywKXD94k9Z0kJVu1uwYOF0wGVw/LuKfNfv8vF5c5o3N0mSpFHW0o5WRCxNUfxcUfPUFcAWQ5y6QkQ8GhGPR8QlEfHWhXyr6j+nv1BnHuMjoqf6ACYMZ/6SFsFyK+e82ptznrRL8+ciSZI0Slq9dHAVYBwwteb4VGD1OufcB+wP7AZ8FJgF/Cki1h9scEQEcDRwY0rprjqveSjQV3o8Pvy3IGmh6t27tc95OU+bkvOLj7mMUJIkdbRWF1pVqebrGORYMTClySmlM1JKd6SUbgD2BB4AvlDntY8D/o2iKKvnSIquV/Wx9gjmLmlRRelH0NsPynnSzs2fiyRJUgO1+h6t54B5DOxercrALtegUkrzI+IWYEBHKyKOpeh8bZ1SqtulSinNBmaXzhvOt5a0KOrdu7XtoXDrKUWe+Xw+Pn0qHFtZHXzYk8X5kiRJba6lHa2U0hzgNoqdAct2AG4azmtUlgZuAjxVPhYRxwG7A+9NKU2pd76kFqq3pPAdB+dsd0uSJHWgdlg6eDTwiYg4MCI2iogfAxOBEwAi4rSIOLI6OCK+HRE7RsTrImIT4BSKQuuE0mv+DNgH+BgwPSJWrzyWbdabkrQYtvlaztOfynlWv/duSZKkjtDqpYOklM6KiJWBb1F8JtZdwM4ppUcrQyYC80unrAicSLHcsA/4G8XSwL+Uxnym8t9ra77dAcCkRs5fUoPUW1K48cfgjl8X+eyPN39ekiRJiyBSGnTPia5W2eK9r6+vj56enlZPR+o+c2bAEWsW+SsPwVGvHzimfNx7tyRJ0ijp7++nt7cXoDel1D/c81re0ZKkAep1t1Z+PTz/UJEv/mLz5yVJkjRMFlqS2lu56HrpGTiqssHo/b/PY2ZOyx0wu1uSJKkNtMNmGJI0POUCao2Ncz51x+bPRZIkaQgWWpI608fOybm/9DF50x5zZ0JJktRyboYxCDfDkDpAecOMzb8ANx9b5OVWgZnPLTjW5YSSJGkRLepmGHa0JHW+d5c2xqgtsiRJklrAQktSZ6puknF4Hyy9XD6+yd4Dx86a7nJCSZLUVO46KKnz1W4Hf/uZCz5/2m7Nn5MkSepqdrQkjX3P3Z/zE3+zuyVJkkadhZaksaXa3TrsyXzsHZ/M+fQPNn9OkiSp61hoSRr7tvnvnOfPzXnKDXa3JEnSqLDQkjQ21dssY9djc/7NXs2flyRJ6gpuhiFp7KvdLOPiL1SeKH2O4H1/gPM+UWQ/d0uSJC0mO1qSutd/nJZztciSJElqADtakrpLbXerKpaANL/IU66DDXZu/twkSdKYYUdLkgA+9rucf7uPm2RIkqTFYkdLUveq191K83Iu71IoSZI0THa0JKnWFl/M+Zfvt7slSZJGzI6WJMHA7tZNPyny1LvzmP6n4bi3FdmdCSVJ0hDsaEnSUDbcNedTtmvdPCRJUkex0JKkoXzgxzm/PC3nu85zSaEkSarLQkuSalWXER7eB0svl4/v8N2cL/p88+clSZI6RqSUWj2HthMRPUBfX18fPT09rZ6OpHYxZwYcsWaRl1wG5s4q8sYfgzt+XWTv3ZIkaUzp7++nt7cXoDel1D/c8+xoSdKiOOiqnKtFFsCcmS4plCRJFlqStEgmrJ5zz9o5X/Ll5s9FkiS1HQstSRquevdu7f/7nO+7OOd5rzRvbpIkqa34OVqStChqP3eraq23wxO3FnnSzvlzuLx3S5KkrmJHS5Iaaa/f5Fz+sOM0v/lzkSRJLWNHS5IWV73u1mu3gSnXFfn03eHxvxTZ7pYkSWOeHS1JGi27n5xztcgCmD+v+XORJElNZUdLkhqp7r1bm8ITtxX5xG3hhYeLbHdLkqQxyUJLkkZLueia1Q/fX6fI1SIL4Jl7YO13NH9ukiRpVLl0UJKaYYlxOW95SM6TdvEDjiVJGoPsaElSM9QuKbzx6CLPnZ3HvDQVVnpd8+cmSZIazo6WJLXSVl/J+fgt7G5JkjRG2NGSpGar7W7dcFSR576cxzx4JZyzX5HdMEOSpI5jR0uS2sVux+VcLbIkSVJHsqMlSa1U29266PMDx9jdkiSp41hoSVK7KBddd58P5+xfZLtbkiR1HJcOSlI7Wv99OS9R+jexO37rhhmSJHUACy1Janf7X5rz70ufwTVnpkWXJEltyqWDktSOau/dGsyz9zdvPpIkaUTsaElSJ9nl6Jx/9YGc7W5JktRW7GhJUrur7W79a/lgymMuP7Tp05IkSfXZ0ZKkTrXvhTn//Zyc585u/lwkSdIC7GhJUiepd+/WOu+Cx/5c5Em7wDP3FNnP3ZIkqSXsaEnSWLDnGTlXiyyAlAaOlSRJo86OliR1quF0t07/EDx+S5HtbkmS1DQWWpI0FpSLrln98P11ilwtsgBefByOf2eRLbokSRpVLh2UpLFmiXE5r79jzie/t/lzkSSpS9nRkqSxpnZJ4RFrVvJLecydZ8MlXyqy3S1JkhrOjpYkdYvyhx1XiyxJkjQqIrkj1QAR0QP09fX10dPT0+rpSFJjlLtbSy4Dc2cVecNd4b6Li2x3S5KkBfT399Pb2wvQm1LqH+55Lh2UpG5RXlL47P3ws8rGGNUiC4riy0JLkqTF5tJBSepGvWvnvO7WOZ/6fji8t3iUt4yXJEkjYkdLkrpRvQ0znrs/j0nzmz8vSZLGCDtakqTsde/J+cw97W5JkrSI7GhJUrcrd7dmvwRHrlXkf97UujlJktTh7GhJkrKInFd7S84XfM7uliRJI2BHS5KUlbtbL78I//eaIt9zfuvmJElSB7KjJUka3Lilcu4p7VJ4/qftbkmStBB2tCRJgyt3t6Y/DT/aoMj3XpTHvPQs/LSyY6EfdixJ0r/Y0ZIkLdz4CTmX7906adumT0WSpE5gR0uStHDl7tasfvj+OkV+eVoe89Sd8JrNmz83SZLakB0tSdLILDEu5/f/MOdf7eq9W5IkVdjRkiSNTLm7NWcGXPrVIs9/JY957kFYc5Pmz02SpDYRKaVWz6HtREQP0NfX10dPT0+rpyNJ7S8l+PMJcNnXi6+XWCoXXm6SIUnqYP39/fT29gL0ppT6h3ueSwclSYsvAt728fx1ubt1/6UuKZQkdR2XDkqSGqO6pDAl+Pvv4LxPFMfPPai185IkqQXsaEmSGisCNty59HXpV80tp8D8ec2fkyRJTeY9WoPwHi1JaqB/ToZTdxx4/L8ehB+tX2Tv45IktSnv0ZIktafVSx9wXP7g4zM+3Py5SJLUJHa0BmFHS5JGyQuPwE83rv+8nS1JUpuxoyVJan8rrVtsmPHVh2HLQwY+f8PR7lAoSRoTLLQkSc23/Cqw9VcGHr/hqJxn9TVvPpIkNZhLBwfh0kFJaqI5M+CINYu80nrwwsNFXvZV8PK0IrukUJLUIi4dlCR1vgMuzblaZAE8eGXx+VySJHUIP7BYktRa1Q86hgXvy9r+O3DVt4t8zn75uN0tSVIHsKMlSWof1aLr8D545yfz8XFL5XzVd+CVWc2fmyRJI2ChJUlqfwdemfNffgHfW82dCSVJbc2lg5Kk9lRvSeHyr4YZzxb5ym/DLScV2SWFkqQ2YqElSWp/5aLrxcfgmDcXuVpkgZtlSJLaioWWJKmzLLdSzj1rQf8TRZ60Czx1e5HtbkmSWqwt7tGKiM9GxJSImBURt0XEVkOM3T8i0iCPZRb1NSVJHaS8YcbB1+Xj1SIL4P7Linu4vI9LktQiLS+0IuIjwDHA94C3AjcAl0bExCFO6wfWKD9SSv/agmoRX1OS1GmWXi7ndx6c87kHNn8ukiSVRGrxmvaI+DPw15TSZ0rH7gUuSCkdOsj4/YFjUkorNuo1Bzm/B+jr6+ujp6dnRO9HktQic2bAEWsWeYklYf7cIm/1Vbjhh0V2SaEkaYT6+/vp7e0F6E0p9Q/3vJZ2tCJiaWBT4Iqap64Athji1BUi4tGIeDwiLomIty7Oa0bE+IjoqT6ACSN9L5KkNrLfJTlXiyxJkpqo1ZthrAKMA6bWHJ8KrF7nnPuA/YG/Az3AF4E/RcTGKaUHF/E1DwW+PdLJS5LaSL3t4MdPgNnTi3z5/8Btvyyy3S1J0ihq+T1aFbXrF2OQY8XAlCanlM5IKd2RUroB2BN4APjCor4mcCTQW3qsPYK5S5La2f6X5lwtsgDmzm7+XCRJXaPVHa3ngHkM7DStysCO1KBSSvMj4hZg/UV9zZTSbOBfv3EjYjjfWpLUrup1t169ETx7b5FP3g5e+EeR7W5JkhqspR2tlNIc4DZgh5qndgBuGs5rRFEVbQI81ajXlCSNUR+/MOdqkQXQ/2Tz5yJJGtNa3dECOBo4PSJuBW4GDgYmAicARMRpwBPV3QIj4tvAZOBBinu0/pOi0PrccF9TktRF6nW3Ntkbbj+zyCdsCXMrnxJid0uS1AAtL7RSSmdFxMrAtyg+E+suYOeU0qOVIROB+aVTVgROpFga2Af8Ddg6pfSXEbymJKkb1RZd1UJr7qw85p4LYeOPgsvIJUmLoeWfo9WO/BwtSeoC5c/d+uDxcOFnB46xuyVJXW9RP0er5R0tSZJaora7VS20llgK5r9S5D/9FK77fpEtuiRJI9Au27tLktQeyhtmVIssSZJGyI6WJEn1NsxY/tUw49kin7M/PHhFke1uSZIWwkJLkqSyctE1fSr86A1FrhZZAPPnNn9ekqSOYqElSVI941fIeY1N4Knbi3zie+CFh4tsd0uSNAgLLUmS6il3t2ZPhyPXLnK1yAK492I4/1NFtuiSJFW4GYYkScMRpV+Z7/xUzueX8rxXmjcfSVJb83O0BuHnaEmShlT+DK7xE4puF8CrXgvTphTZ7pYkjQl+jpYkSc1Sb8OMapEF8OhkOHP3Ilt0SVLXcemgJEmLo7xhxmafz/nMPZo/F0lS27CjJUnS4qj9DK7Jx1WeKC3Nv/lncM33imx3S5K6goWWJEmNUi66Hr4GTv9QkatFliSpa1hoSZI0GtZ5Z87Lvgpenlbk3+4N/7imyHa3JGnMstCSJGk0lLtbfU/Aj99Y5GqRBTD9aVh5vebPTZI06iy0JEkabcuumPN628HDfyzyzzeHubOLbHdLksYUCy1JkkZb7YYZ1c/gqhZZAFf/L0w+vsgWXZLU8dzeXZKkVtn9lJyrRRYUn811eG/xmDOj+fOSJC02O1qSJDVTbXerapUN4Ln7i3zye5s/L0lSQ1loSZLUKuWia/Z0OHLtIld3KAS4/dfwh68U2SWFktQxXDooSVI7iNKv5J1+kHO1yAKYM9MlhZLUIexoSZLUDmqXFF72tSIvtRy8MrPI5x7UmrlJkkbMjpYkSe3soCtznnJdzi88YndLktqYHS1JktpNvQ0z3rQ73H1ekX+5U/PnJUkaNgstSZLaWW3RVS20ZvfnMU/8FX71gSK7YYYktQWXDkqS1Im2/lrOp+3WunlIkgZlR0uSpE5R2926vrI7YZqfx/zpp3Dd94tsd0uSWsaOliRJnW6v3+RcLbIAZjzvhhmS1CJ2tCRJ6kT1NsxY/tUw49ki/3zz5s9LkgRApJRaPYe2ExE9QF9fXx89PT2tno4kScM3fSr86A0Dj2+0G9x7UZFdUihJw9bf309vby9Ab0qpf2Hjq1w6KEnSWDJ+hZz/47Scq0UWwLMPuKRQkkaZSwclSRpL6i0pfO22MOXaIp+yfbNnJUldx0JLkqSxqrboOmLNIs+fm8fccipc+Y0iu6RQkhrGQkuSpG5QLroe+iOcsXuRq0WWJKmhvEdLkqRuM3GznJdaLufLD/PeLUlqEDtakiR1m3J369n74WfvLPJtk/KY+fOaPi1JGksstCRJ6ma9a+e88uvh+YeKfMr74Nl7i+y9W5I0YhZakiR1s3J3a1YffH9ikatFFsD9l8K5BxXZokuShsV7tCRJUmGZ3qLo+uo/4G375ePVIgsgpebPS5I6kIWWJEla0PIrw05H5q/LHayz9nHDDEkaBpcOSpKkgcpLCvufgqM3LPI/rslj0vzmz0uSOoQdLUmSNLSeNYqi63O3wLpb5uNHrm1nS5LqsNCSJEnD8+o3wEfPGnh88s9hVn/z5yNJbSySN7UOEBE9QF9fXx89PT2tno4kSe3nqTvhF1sNPP7luxfcMl6SOlx/fz+9vb0AvSmlYf+rkvdoSZKkkVt5vZxXWg9eeLjIJ2wJL08rslvBS+piFlqSJGnkyptlzJ5e3K8FucgCePJvC97TJUldxHu0JEnS4onSnxPv/WbOv9rVreAldS07WpIkafGUu1tzZsDV3y1yefv3+/4A532iyC4plNQF7GhJkqTRscepOVeLLIA5M+10SRrz7GhJkqTGqe1uVcUSucP1lxObPy9JajI7WpIkafTtc17O1/8g55dftLslaUyyoyVJkkZHve5Wz9rQ/3iRJ+3S/HlJUhPY0ZIkSc110BU5T5uS86M32d2SNGZYaEmSpNFX7W4d3gfLrpiPv+PgnM/895xnz7DoktTRLLQkSVLrbPO1nJco3dFw1t7Nn4skNZCFliRJaq5yd2vp5fLxT1yd8+N/yXnqPXa3JHUcCy1JktQeetbM+d8+kvOv3DBDUuex0JIkSa1Tr7v1vu/lPHd2zlNusLslqSNYaEmSpPZQr+h6/w9z/s1HBp4nSW3IQkuSJLW3N3249EXkeMspdrcktS0LLUmS1H7qdbf2PjfnK7+Z85yZFl2S2sqSCx8iSZLUQtWiCxYsopZcBubOKvL1Pxx4niS1kB0tSZLUmfa7JOe//CLnGc/b3ZLUcna0JElS56jX3VplA3ju/iKf+r58fM5MOKKybfxhTxbnS1IT2NGSJEmdb7+Lc57+VM5Trmv+XCQJCy1JktSpyhtmjF8hH3/3l3I+96CcZ89wSaGkprHQkiRJY8vmn895yWVz/u1Hc3aXQkmjzEJLkiR1vnrbwX/q+pyfuDXnFx9r3twkdSU3w5AkSWNLvQ0zNtoN7r2oyKdsn4+7YYakUWBHS5IkdYddjs45zcv5Tz9p/lwkjXkWWpIkaeyqt6Rw73NzvvnYnL13S1KDWGhJkqTus8bGOS+7Us6XfLn5c5E0JlloSZKk7lCvu3Xg5TnfV/o8rpnT7G5JWmRuhiFJkrpPvQ0z1tkMHptc5NN2a/68JI0ZdrQkSZKq9jw95xceztnulqQRsqMlSZK6W73u1hs/CPdcWGS7W5JGyI6WJEnSYHb+Uc7l7tbLL9rdkrRQdrQkSZKqhtPd+vV/NH9ekjqOHS1JkqSFKXe3pt6d86zpdrckDcqOliRJ0mDqdbcmbgH/vKnI5Xu35syEI9Ys8mFPFudL6loWWpIkSQtTLrpmT4cj1y7yc/fnMf+c3Px5SWpbLh2UJEkaiSj9+fTWj+d89j45z57hkkKpy9nRkiRJGonaJYV/O63IS46HubOLfPa+rZmbpLZhR0uSJKkRDr4+58dKywhffMzultSF7GhJkiQtqnobZrzh/fDApUU+Zft83A0zpK7RFh2tiPhsREyJiFkRcVtEbDXM8/aKiBQRF9QcXyEijouIxyPi5Yi4NyI+MzqzlyRJqrHbsTnPnp7zw1c3fy6SWqLlhVZEfAQ4Bvge8FbgBuDSiJi4kPNeAxxVGV/rx8BOwD7ARpWvj42IDzZw6pIkSVm1u3V4Hyy9XD6+4xE5n39wznNmuqRQGsNaXmgBhwCnpJROTindm1L6EvAYULcDFRHjgDOBbwP/GGTI5sCvUkrXppQeSSmdCNwBvL3O642PiJ7qA5iwmO9JkiSp8JY9cx63VM5XHd70qUhqnpYWWhGxNLApcEXNU1cAWwxx6reAZ1NKp9R5/kZgt4hYKwrvAd4AXF5n/KFAX+nx+DDfgiRJ0kD1ulsHXJbz7Wfk7Hbw0pjT6s0wVgHGAVNrjk8FVh/shIh4N3AQsMkQr/ufwEkUBdNcYD7wiZTSjXXGHwkcXfp6AhZbkiSpEeptmPHqDeHZ+4p8obeSS2NNOywdBEg1X8cgx4iICcAZwCdTSs8N8Xr/CWwG7EbRMfsv4PiI2H6wwSml2Sml/uoDmD7YOEmSpIbZ98KcH7oq51nT7W5JY0CrO1rPAfMY2L1alYFdLoD1gHWBiyOiemwJgIiYC2wAPAkcAXw4pfT7ypg7I2IT4CvAVUiSJLVCve7Wyq+H5x8q8qnvy8fdDl7qWC3taKWU5gC3ATvUPLUDcNMgp9wHvIVi2WD1cRFwTSU/BixVecyvOXce7dPBkyRJyvYpfVLNi4/mPOX6gWMldYRWd7SguDfq9Ii4FbgZOBiYCJwAEBGnAU+klA5NKc0C7iqfHBEvAqSUqsfnRMR1wA8j4mXgUWAb4OMUOxxKkiS1Xr3u1nu+Adf8b5HPPTAft7sldZSWd3hSSmcBX6LYSfB2YGtg55RS9Z9zJgJrjPBl9wJuodgC/h7g68D/UCneJEmS2tam++ccpT/VfrNXzn4Gl9T22qGjRUrpeOD4Os9tu5Bz9x/k2NPAAY2YmyRJ0qir193a9wI4bbciP3FrPn7Hb5s3N0mLpC0KLUmSJFXUK7q2+grccFSRr/xGPj5ruksKpTbU8qWDkiRJGoZ3fTrnZV+V8y93ytklhVLbsNCSJElqV9Xu1uF9sPRy+fgnrs552pScbzm5eXOTNCQLLUmSpE5QLromrJaPb/21nK/7fs59T9jdklrIQkuSJKmTvfPgnFdeP+eTtm36VCRlFlqSJEmdpt6Swv3/kHO5i3X/pXa3pCaz0JIkSepk5aJrfGnHwd2Oy/ncg5o/L6nLRUqp1XNoOxHRA/T19fXR09PT6ulIkiSN3JwZedt3Aqj5m8+t4KVh6e/vp7e3F6A3pdQ/3PP8HC1JkqSxqPx5XFOuh1/tuuDzD1wBv9u/yBZdUsO5dFCSJGmsW2vTgceqRRbAzGnewyU1mIWWJEnSWFftbh32ZD625LI5/2LL5s9JGuMstCRJkrrRp27I+eVpOZ//KXjuwebPRxpj3AxjEG6GIUmSxrzyZhkf+jlc8JmBY77wV1h5vebOS2ozi7oZhoXWICy0JElSVykXXettBw//schLrwBzXiqyG2aoS7nroCRJkhZNeYfCctFVLbIAHvsLrPee5s9N6lB2tAZhR0uSJHW9+fPgzyfA5YcNfM7ulrrIona03AxDkiRJAy0xDjbdP38dpT8bf7u328FLC2GhJUmSpMFVlxQe3gefvCYf/0cp33oqvPJy8+cmtTkLLUmSJC3cKuvnvOmBOV/xDfje6kV3a8ZzzZ+X1Ka8R2sQ3qMlSZI0hPKGGT1rQf8TA7P3cWmMcNdBSZIkNUd5l8KXX4T/e02Rq0UWwKM3weu3h4jmz09qA3a0BmFHS5IkaYTmzIDrfgB/Ombgc4c+AeNXaP6cpAZw10FJkiS1ztLLwzZfy18vOT7nX+7sLoXqOi4dlCRJUmOUlxROexR+8m9FfvqOPOaZe2HtfRd6/wAAFgdJREFUtzd/blKTWWhJkiSp8ZZfJeeNPwp3/KbIJ2+Xj7thhsYwCy1JkiQ1Xrm7NWdGLrTKTt8dHptcZIsujTEWWpIkSRpd5aLr8VtzV6taZAFM/jlc/d0iW3RpDHAzDEmSJDXPqhvlvNnnc64WWQAznnfzDHU8O1qSJElqntolhZOPK/KENWD6U0U+ces8fs7M/OHIdrrUQSy0JEmS1BrlomvmC/CD1xb55Wl5zOWH5mzRpQ7i0kFJkiS1Xvlzt3Y9Nue/n5Pzozc1bz7SYrLQkiRJUutVu1uH98Fb9sjH198x53M+nvPsGd7HpbZmoSVJkqT29cGf5bzksjlf9Lnmz0UaAQstSZIktZdyd2vp5fLxT92Q84NX5Dxnpt0ttR03w5AkSVL7qt2lsGrl18PzDxX5gk83f17SQtjRkiRJUufZ98KcH7oq5+lT7W6pLdjRkiRJUmeo191aZzN4bHKRT9wmH3c7eLWQHS1JkiR1tj1Pz3l2f85XHZ6z93GpySy0JEmS1HnKG2aML3WqPvCTnG8/I+en7mje3CQstCRJkjSWbLhLzuttl/OZpc/msrulJrDQkiRJUmertx38h3+Rc4zL+dKv5WzRpVFioSVJkqSxo17RdeDlOd99Xs5zZzdvbuoqFlqSJEka+161bs5rbJzzL3fK2e6WGshCS5IkSWNTve7Wx87Jue+xnJ+9L2eLLi0mCy1JkiSNfQvsUrhCPr7Z53I+bbfmz0tjloWWJEmSuteWX845zc/ZDTO0mCy0JEmS1F3qLSn8yK9zLm+Y8dSdOVt0aZgstCRJkiSAdd6Z8xs/mPOZuw8+3qJLQ1iy1ROQJEmSWqba3YIFi6WdfwT3XFj5IoBUxGuOaObs1MHsaEmSJElQf0nhvhfkfNupOZc/g8vulmpYaEmSJElDWe1NOa+yQc6n7tj8uahjWGhJkiRJtep1tz5+Uc79j+f8z8k5290SFlqSJEnS8C0xLuctD8n57H0GH2/R1bUstCRJkqSh1OtubfbZnKNUgN14TPPmprZloSVJkiQtrgMuzXnycTmnlLPdra7i9u6SJEnScNXbDn6l1+W8wmrw0tQin7nH4K8zZyYcsWaRD3uyeF2NKXa0JEmSpEY64LKcn74z53/e3Py5qGUstCRJkqRFUe/erfETcn77QTmfvW/OLikc8yy0JEmSpMVVr+ja9tCcxy2V8y93at7c1BLeoyVJkiQ1w0F/hBO3LvILD+fjfz8n5/K9W1Xew9WR7GhJkiRJjVSvu9VTKqDe+62cLy91vcpLCtXRLLQkSZKkZnvbx3Me35Pz6R8cONZ7uDqShZYkSZI0Wup1t8o+cXXOz9wz9OtZdHUMCy1JkiSpGeoVXcuumPO7PjPwvN8fMvjrWXS1NQstSZIkqdnqFV1b/dfAsfdelPNzD47+3NQQFlqSJElSO3vttjlPen/O8+fmbHer7VhoSZIkSa20sPu49jg55yj9+X7qjqM/Ny0yCy1JkiSpXVSLrsOeHPz5g6/L+cVHc/7HtTnb3WoLFlqSJElSp5iwRs5bfSXn8z4x+HiLrpax0JIkSZLazXC2hX/Xp3OOcTn/7YzRnZuGxUJLkiRJamfDKbr2OS/nPx4++Bi7W01loSVJkiR1utXelPPSy+d8xf8MPt6ia9RZaEmSJEmdYjjdrQOvyPnOs3J+edrg4y26RsWSrZ6AJEmSpEVQLbpgwQJphdVyXuvt8MStRT7pPc2bm+xoSZIkSWPWXr/Jec5LOU8+fvDxdrcaxkJLkiRJ6nT1lhRG5LzLj3O+8eicX/zn4K9p0bVYLLQkSZKkbrDRrjmvulHOp2zf/Ll0AQstSZIkaSwZzoYZ+16Uc5qf8+8OHHy83a0Rs9CSJEmSuk15SeF+v8/5ketzfva+wc+16BoWdx2UJEmSxqp6OxOWvXqDnN/4IbjngiL/6gMLf/05M+GINYt82JMLfoZXl7OjJUmSJKmw81GDH//DV5o7jzHAQkuSJEnqBsO5d6tsv0tyrna5APqfHHy8SwoX4NJBSZIkqdsMa0nhhjmvu3W+f+uU7UZ3bmNEW3S0IuKzETElImZFxG0RsdUwz9srIlJEXDDIcxtFxEUR0RcR0yNickRMbPzsJUmSpDHu30/Ned4rOV9zxODj7W61vtCKiI8AxwDfA94K3ABcurCiKCJeAxxVGV/73HrAjcB9wLbAxsB3gVmNnLskSZLU8Ua6pHDP03O+rVSAvfxi4+fWwdph6eAhwCkppZMrX38pInYEPgMcOtgJETEOOBP4NrAVsGLNkO8Bf0gpfa107B8NnbUkSZI01gxnSeHEzXNe7c0w9a4in7Tt4OO7dGfClna0ImJpYFPgipqnrgC2GOLUbwHPppROGeQ1lwB2AR6IiMsj4pmI+HNEfGiIeYyPiJ7qA5gw4jcjSZIkdZt9zs95zks5//2c5s+lzbR66eAqwDhgas3xqcDqg50QEe8GDgI+Wec1VwVWAL4OXAa8DzgfOC8itqlzzqFAX+nx+PDfgiRJkjQGDWdJYfmDjz/wk5wvH3RhWlfdu9XqQqsq1XwdgxwjIiYAZwCfTCk9V+e1qu/pwpTSj1NKt6eUvg9cAny6zjlHAr2lx9ojnL8kSZI0dg2n6Npwl5yXKo35/SGDjx/jRVer79F6DpjHwO7VqgzscgGsB6wLXBy5el4CICLmAhsAjwFzgXtqzr0X2HKwSaSUZgOzq19HuTKXJEmSNDIHXg6/qGwkfu9F+fi0RwYfPwbv42ppoZVSmhMRtwE7UCzvq9oBuHCQU+4D3lJz7H8p7qn6IvBY5TVvoSi6yt4APNqQiUuSJEndajgbZkxYI+fXvQf+cU2RT33fwl9/jBRdre5oARwNnB4RtwI3AwcDE4ETACLiNOCJlNKhKaVZwF3lkyPiRYCUUvn4D4GzIuJ64BpgJ2BXiq3eJUmSJDXL7ifBUa8vcpqfj19Q766esaHlhVZK6ayIWJliJ8E1KAqpnVNK1e7TRGB+vfPrvOb5EfFpik0ufgrcD+yRUrqxcTOXJEmSutxwultlH78ITtutyA9dlY8/9ufGz63FWl5oAaSUjgeOr/Pctgs5d/86x08FTh3sOUmSJEkNNpyia9U35vym3eHu84p81t75+Py5ozO/JmuLQkuSJEnSGDKcouv9P8iF1rilYd6cIv9i69GfXxO0y/bukiRJkrrVJ6/NecYzOfc/0fSpNIqFliRJkqTRM5zP4Fph1Zx3Oy7nnrVGd26jyKWDkiRJkppjOEsK37BT8+Yziiy0JEmSJDXfSHcs7DAuHZQkSZKkBrOjJUmSJKm1xmB3y0JLkiRJUvsoF10dzKWDkiRJktRgFlqSJEmS1GAWWpIkSZLUYBZakiRJktRgFlqSJEmS1GAWWpIkSZLUYBZakiRJktRgFlqSJEmS1GAWWpIkSZLUYBZakiRJktRgFlqSJEmS1GAWWpIkSZLUYBZakiRJktRgFlqSJEmS1GAWWpIkSZLUYBZakiRJktRgFlqSJEmS1GAWWpIkSZLUYBZakiRJktRgFlqSJEmS1GAWWpIkSZLUYBZakiRJktRgFlqSJEmS1GAWWpIkSZLUYBZakiRJktRgFlqSJEmS1GAWWpIkSZLUYBZakiRJktRgFlqSJEmS1GAWWpIkSZLUYBZakiRJktRgFlqSJEmS1GAWWpIkSZLUYEu2egLtrL+/v9VTkCRJktRCi1oTREqpwVPpfBGxFvB4q+chSZIkqW2snVJ6YriDLbQGEREBrAlMb/VcgAkURd/atMd81Pm8ptRoXlNqJK8nNZrXlBphAvBkGkHx5NLBQVT+Bxx2tTqaipoPgOkpJdcyarF5TanRvKbUSF5PajSvKTXIiK8dN8OQJEmSpAaz0JIkSZKkBrPQan+zge9U/is1gteUGs1rSo3k9aRG85pSS7gZhiRJkiQ1mB0tSZIkSWowCy1JkiRJajALLUmSJElqMAstSZIkSWowC60WiYitI+LiiHgyIlJEfKjm+YiIwyvPvxwR10bEm2rGvCoiTo+Ivsrj9IhYsbnvRO1gGNfTpMrx8mNyzZjxEXFsRDwXETMi4qKIWLu570TtIiIOjYhbImJ6RDwTERdExAY1YxZ6zUTExMq1OaMy7qcRsXRz341abZjX07WD/Jz6bc0Yf+8JgIj4TETcGRH9lcfNEfH+0vP+fFLLWWi1zvLAHcDn6zz/NeCQyvPvAJ4GroyICaUxvwY2AXaqPDYBTh+tCautLex6ArgMWKP02Lnm+WOADwN7AVsCKwCXRMS4hs9WnWAb4GfAZsAOwJLAFRGxfGnMkNdM5b+/p7g+t6yM2wP4UZPeg9rHcK4ngJNY8OfUp2qe9/eeqh4Hvg68vfK4Griw9I/S/nxSy7m9exuIiAR8OKV0QeXrAJ4Ejkkp/V/l2HhgKvDfKaVfRMRGwD3AZimlP1fGbAbcDGyYUrq/BW9FbaD2eqocmwSsmFL6UJ1zeoFngX1TSmdVjq0JPAbsnFK6fNQnrrYWEa8GngG2SSldP5xrpvKvy5cA66SUnqyM2QuYBKyaUupvwVtRG6i9nirHrgVuTyl9qc45/t7TkCLiBeCrwO/w55PagB2t9vRaYHXgiuqBlNJs4Dpgi8qhzYG+6i+bypjJQF9pjFS2bWXJzgMRcVJErFp6blNgKRa85p4E7sLrSYXeyn9fqPx3ONfM5sBd1T9iKi4HxlfOV/eqvZ6q9q4s4bo7Io6qWcXh7z0NKiLGVYqk5SkKb38+qS0s2eoJaFCrV/47teb4VOA1pTHPDHLuM6XzpapLgXOARykK+e8CV0fEppUifnVgTkppWs15U/F66nqVLvvRwI0ppbsqh4dzzaxOzc+xlNK0iJiD11XXqnM9AZwJTKFYKv9m4EhgY4qlhuDvPdWIiLdQFFbLAC9RrOa4JyI2wZ9PagMWWu2tdl1n1BwbbN1n7RiJ6tKJirsi4laKomsX4LwhTvV6EsBxwL9R3MewMP6c0sIMej2llE4qfXlXRDwI3BoRb0sp/bU6bJDX83rqXvdT3Ke3IsX9Vb+KiG2GGO/PJzWVSwfb09OV/9b+i8qq5H99eRpYbZBzX83ATpi0gJTSUxSF1vqVQ08DS0fEq2qGlq85daGIOBbYDXhPSunx0lPDuWaepubnWGX8UnhddaUhrqfB/BV4hQV/Tvl7T/+SUpqTUnoopXRrSulQik2hvog/n9QmLLTaU3XpRHW5BJXtRrcBbqocuhnojYh3lsa8i2Ld+01IQ4iIlYF1gKcqh26j+IOmfM2tQbF8x+upC0XhOGB34L0ppSk1Q4ZzzdwMvLlyvOp9wOzK+eoSw7ieBvMmij96qz+n/L2nhQmKe6z8+aS24K6DLRIRKwCvr3z5N4qt3K8BXkgp/TMi/hs4FDgAeBA4DNgW2CClNL3yGpcCa5K3vz0ReDSltGuz3ofaw1DXU+VxOHAuxR8s6wJHABOBjUrX08+BDwD7V845ClgZ2DSlNK8570TtIiKOBz4GfJBieU5VX0rp5cqYIa+ZyvbJt1P86/BXgZUodvS6IKX0hea8E7WDhV1PEbEesDfwB+A54I0U22y/DLyj+jPI33uqiogjKO4/fgyYQLE9+9eBnVJKV/rzSW0hpeSjBQ+KoikN8phUeT4o/jh+CphFsePgm2teYyXgDKC/8jiDYgvvlr8/H+1zPQHLUuyk9Awwh2LJ4CSKLW3Lr7EMcCzwPDATuLh2jI/uedS5nhKw/0iuGYqC/pLK889Xxo9v9fvz0V7XE0WH/brKNTIbeAj4CbBSzev4e89H9Vo4BXikcr08A1wF7FB63p9PPlr+sKMlSZIkSQ3mPVqSJEmS1GAWWpIkSZLUYBZakiRJktRgFlqSJEmS1GAWWpIkSZLUYBZakiRJktRgFlqSJEmS1GAWWpIkSZLUYBZakqSuFhGPRMSXWj0PSdLYYqElSeoKEbF/RLw4yFPvAE5swve3oJOkLrJkqycgSVIrpZSebfUcRiIilk4pzWn1PCRJQ7OjJUlqqoi4NiJ+GhE/iIgXIuLpiDh8mOf2RsSJEfFMRPRHxNURsXHp+Y0j4pqImF55/raIeHtEbAv8EuiNiFR5HF45Z4FOU+W5T0XEJRExMyLujYjNI+L1lbnPiIibI2K90jnrRcSFETE1Il6KiFsiYvvyewZeA/y4+v1Lz+0REXdHxOzKXP6r5j0/EhHfiIhJEdEHnBQRS0fEcRHxVETMqow5dET/R0iSRpWFliSpFfYDZgDvAr4GfCsidhjqhIgI4PfA6sDOwKbAX4E/RsRKlWFnAo9TLAfcFPg+8ApwE/AloB9Yo/I4aohv903gNGAT4D7g18AvgCOBt1fGHFcavwLwB2B74K3A5cDFETGx8vzulXl9q/T9iYhNgbOB3wJvAQ4HvhsR+9fM56vAXZX39F3gP4HdgD2BDYB9gEeGeD+SpCZz6aAkqRXuTCl9p5IfjIjPA9sBVw5xznsoipFVU0qzK8e+EhEfAv6d4j6ricAPU0r3VV+7enKlG5RSSk8PY36/TCmdXTnv/4Cbge+mlC6vHPsJRYcMihe9A7ijdP43IuLDFMXQcSmlFyJiHjC95vsfAvwxpfTdytcPRMQbKQqrSaVxV6eU/lUYVgq4B4EbU0oJeHQY70mS1ER2tCRJrXBnzddPAasu5JxNKTpHz1eW570UES8BrwWqy/iOBk6OiKsi4uvl5X2LMb+plf/+vebYMhHRAxARy1eWQt4TES9W5rUhReE3lI2AP9Uc+xOwfkSMKx27tWbMJIpu2/2VZZjvW+g7kiQ1lYWWJKkVXqn5OrHw30lLUBRkm9Q8NgB+CJBSOhx4E8USw/cC91Q6S4szvzTEseqcfwjsAfwPsFVlXn8Hll7I94nSa5WP1ZpR/iKl9FeKAvObwLLA2RHxu4V8L0lSE7l0UJLUKf5KcX/W3JTSI/UGpZQeAB6g2HjiN8ABwPnAHGBcvfMW01bApJTS+QARsQKwbs2Ywb7/PcCWNce2AB5IKc0b6humlPqBs4CzKkXWZRGxUkrphUV7C5KkRrKjJUnqFFdR3Ct1QUTsGBHrRsQWEfG/lZ0Fl63sxLdtRLwmIt5NsSnGvZXzHwFWiIjtImKViFiugXN7CNg9Ijap7IL4awb+jn0E2Doi1oqIVSrHfgRsFxHfjIg3RMR+wOcZeqMOIuLLEbFXRGwYEW8A/gN4Ghjsc8IkSS1goSVJ6giVTR92Bq4HTqXoWv2WonM0FZgHrEyxW+ADFLv5XQp8u3L+TcAJFF2gZyl2O2yULwPTKHY3vJhi18G/1oz5VmWuD1e+f3UJ4J7AXhS7Cv4/4FsppUkL+X4vAf9Nce/WLZXX3TmlNH+x34kkqSGi+L0lSZIkSWoUO1qSJEmS1GAWWpKkthARe5e3ba953N3q+UmSNBIuHZQktYWImACsVufpV1JKfiivJKljWGhJkiRJUoO5dFCSJEmSGsxCS5IkSZIazEJLkiRJkhrMQkuSJEmSGsxCS5IkSZIazEJLkiRJkhrMQkuSJEmSGuz/A+JRmFwgx2UeAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x24c1733cf60>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "\n",
    "cvresult = cvresult.iloc[100:]\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(100,cvresult.shape[0]+100)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(10, 10), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_detail.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 根据图表可知，n_estimators=340效果最优"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
